Apache Ivy-এর সাহায্যে multi-module project তৈরি করা এবং প্রতিটি মডিউলকে আলাদা আলাদাভাবে বিল্ড ও পাবলিশ করা যায়। এটি প্রোজেক্টের বিভিন্ন মডিউলের ডিপেন্ডেন্সি এবং রেজলভেশনকে সঠিকভাবে ম্যানেজ করতে সাহায্য করে। যখন আপনার প্রোজেক্টে একাধিক মডিউল থাকে, তখন আপনি Ivy ব্যবহার করে প্রতিটি মডিউলের জন্য ডিপেন্ডেন্সি রেজলভ, বিল্ড এবং পাবলিশিং প্রক্রিয়া অটোমেটিক করতে পারেন।
একটি multi-module project হলো এমন একটি প্রোজেক্ট যা একাধিক মডিউল বা সাব-প্রোজেক্ট নিয়ে গঠিত। প্রতিটি মডিউল আলাদা আলাদা লাইব্রেরি বা অ্যাপ্লিকেশন হতে পারে, তবে তারা একে অপরের উপর নির্ভরশীল হতে পারে। যেমন, একটি বড় প্রোজেক্ট যা বিভিন্ন মডিউল, ক্লাস, লাইব্রেরি ব্যবহার করে, এবং তাদের মধ্যে ইন্টার-ডিপেন্ডেন্সি থাকতে পারে।
প্রথমে, আমরা একটি multi-module project তৈরি করি যার কয়েকটি মডিউল থাকবে এবং প্রতিটি মডিউল আলাদা আলাদা ডিপেন্ডেন্সি রেজলভ করবে। প্রতিটি মডিউল তাদের নিজস্ব ivy.xml ফাইল ব্যবহার করবে।
ধরা যাক, আমাদের একটি প্রোজেক্টে দুটি মডিউল আছে:
my-multi-module-project/
│
├── module-a/
│ └── ivy.xml
│
├── module-b/
│ └── ivy.xml
│
└── build.xml
module-a এর জন্য একটি ivy.xml ফাইল তৈরি করুন যা এর নির্ভরশীল লাইব্রেরি নির্ধারণ করবে।
module-a/ivy.xml:
<ivy-module version="2.0">
<info organisation="com.example" module="module-a" revision="1.0" />
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.12.0"/>
</dependencies>
</ivy-module>
এখানে:
module-b এর জন্য একটি ivy.xml ফাইল তৈরি করুন, এবং এটিকে module-a এর উপর নির্ভরশীল করুন।
module-b/ivy.xml:
<ivy-module version="2.0">
<info organisation="com.example" module="module-b" revision="1.0" />
<dependencies>
<dependency org="com.example" name="module-a" rev="1.0"/>
</dependencies>
</ivy-module>
এখানে:
এখন, একটি build.xml ফাইল তৈরি করুন যা module-a এবং module-b এর জন্য ডিপেন্ডেন্সি রেজলভ করবে এবং বিল্ড করবে।
build.xml:
<project name="MultiModuleBuild" default="resolve-dependencies" basedir=".">
<taskdef name="ivy" classname="org.apache.ivy.ant.IvyTask"/>
<!-- Resolve dependencies for module-a -->
<target name="resolve-module-a">
<ivy:resolve file="module-a/ivy.xml"/>
<ivy:retrieve file="module-a/ivy.xml"/>
</target>
<!-- Resolve dependencies for module-b -->
<target name="resolve-module-b">
<ivy:resolve file="module-b/ivy.xml"/>
<ivy:retrieve file="module-b/ivy.xml"/>
</target>
<!-- Build module-a -->
<target name="build-module-a" depends="resolve-module-a">
<echo message="Building module-a"/>
<!-- Module-a build commands (like compiling) can be added here -->
</target>
<!-- Build module-b -->
<target name="build-module-b" depends="resolve-module-b">
<echo message="Building module-b"/>
<!-- Module-b build commands (like compiling) can be added here -->
</target>
<!-- Default target that builds all modules -->
<target name="resolve-dependencies" depends="build-module-a, build-module-b"/>
</project>
এখানে:
এখন, Ant কমান্ড ব্যবহার করে স্ক্রিপ্টটি চালাতে হবে:
ant resolve-dependencies
এটি module-a এবং module-b এর ডিপেন্ডেন্সি রেজলভ করবে এবং তাদের ডাউনলোড করবে।
Multi-module project পাবলিশ করার জন্য, আপনাকে প্রতিটি মডিউল আলাদাভাবে Ivy এর মাধ্যমে রিপোজিটরিতে পাবলিশ করতে হবে। Ivy টাস্কের মাধ্যমে এটি সম্ভব।
module-a এবং module-b উভয় মডিউলের জন্য publish টাস্ক তৈরি করতে হবে।
build.xml এ publish টাস্ক যুক্ত করা:
<target name="publish-module-a">
<ivy:publish file="module-a/ivy.xml" settings="ivysettings.xml"/>
</target>
<target name="publish-module-b">
<ivy:publish file="module-b/ivy.xml" settings="ivysettings.xml"/>
</target>
<target name="publish-all" depends="publish-module-a, publish-module-b">
<echo message="All modules published successfully"/>
</target>
এখানে:
এখন, Ant স্ক্রিপ্টের মাধ্যমে উভয় মডিউল রিপোজিটরিতে পাবলিশ করা যাবে:
ant publish-all
এটি module-a এবং module-b উভয়কে নির্দিষ্ট রিপোজিটরিতে পাবলিশ করবে।
এখন, যদি আপনার multi-module project Ivy repository তে পাবলিশ করা থাকে, তাহলে আপনি অন্য প্রোজেক্টে সহজেই সেই মডিউলগুলিকে ডিপেন্ডেন্সি হিসেবে যুক্ত করতে পারবেন।
ivy.xml এ অন্য প্রোজেক্টে multi-module project ব্যবহার করার উদাহরণ:
<ivy-module version="2.0">
<info organisation="com.example" module="other-project"/>
<dependencies>
<dependency org="com.example" name="module-a" rev="1.0"/>
<dependency org="com.example" name="module-b" rev="1.0"/>
</dependencies>
</ivy-module>
এখানে:
Ivy ব্যবহার করে multi-module project তৈরি এবং পাবলিশ করা খুবই সহজ। আপনি প্রতিটি মডিউলের জন্য আলাদা ivy.xml ফাইল তৈরি করতে পারেন এবং তাদের জন্য ডিপেন্ডেন্সি রেজলভ এবং বিল্ড করতে পারেন। Ant বিল্ড স্ক্রিপ্টে Ivy টাস্ক ব্যবহার করে multi-module project এর জন্য ডিপেন্ডেন্সি রেজলভ এবং পাবলিশিং প্রক্রিয়া পরিচালনা করা যায়। Ivy এর মাধ্যমে multi-module project ম্যানেজমেন্ট আরও সহজ, কার্যকরী, এবং সুসংগঠিত হয়।
common.read_more